package cn.iocoder.yudao.module.reading.service.recordings;

import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.reading.controller.app.recordings.vo.*;

/**
 * 配音管理 Service 接口
 *
 * @author 李晨
 */
public interface RecordingsService {

    /**
     * 获取用户配音列表
     *
     * @param userId    用户ID
     * @param pageParam 分页参数
     * @return 用户配音列表
     */
    PageResult<UserRecordingRespVO> getUserRecordingList(Long userId, PageParam pageParam);

    /**
     * 获取用户配音聚合列表（按绘本聚合）
     *
     * @param userId    用户ID
     * @param pageParam 分页参数
     * @return 用户配音聚合列表
     */
    PageResult<UserRecordingAggregateRespVO> getUserRecordingAggregateList(Long userId, PageParam pageParam);

    /**
     * 获取用户配音详情页信息
     *
     * @param userId 用户ID
     * @param bookId 绘本ID
     * @return 用户配音详情页信息
     */
    UserRecordingDetailPageRespVO getUserRecordingDetailPage(Long userId, Long bookId);

    /**
     * 批量设置绘本配音的公开状态
     *
     * @param userId   用户ID
     * @param bookId   绘本ID
     * @param isPublic 是否公开
     */
    void setBookRecordingsPublic(Long userId, Long bookId, Boolean isPublic);

    /**
     * 生成绘本配音分享信息
     *
     * @param userId 用户ID
     * @param bookId 绘本ID
     * @return 分享信息
     */
    UserRecordingShareRespVO generateBookRecordingShare(Long userId, Long bookId);

    /**
     * 保存用户录制音频
     *
     * @param userId 用户ID
     * @param reqVO  创建请求
     */
    void saveUserRecording(Long userId, UserRecordingCreateReqVO reqVO);

    /**
     * 获取用户录制音频
     *
     * @param userId 用户ID
     * @param pageId 页面ID
     * @return 用户录制音频详情
     */
    UserRecordingDetailRespVO getUserRecordingByPage(Long userId, Long pageId);

    /**
     * 删除用户绘本的所有配音记录
     *
     * @param userId 用户ID
     * @param bookId 绘本ID
     */
    void deleteBookRecordings(Long userId, Long bookId);

    /**
     * 删除配音记录
     *
     * @param userId      用户ID
     * @param recordingId 配音记录ID
     */
    void deleteRecording(Long userId, Long recordingId);

    /**
     * 分享配音记录
     *
     * @param userId      用户ID
     * @param recordingId 配音记录ID
     */
    void shareRecording(Long userId, Long recordingId);

    /**
     * 检查页面音频状态
     *
     * @param userId 用户ID
     * @param pageId 页面ID
     * @return 页面音频状态
     */
    PageAudioStatusRespVO getPageAudioStatus(Long userId, Long pageId);

}
